const baseURL = "https://pcapi-xiaotuxian-front-devtest.itheima.net";
import { useMemberStore } from "@/store/member";

uni.addInterceptor("request", {
  invoke(args) {
    // console.log("args：", args);
    // 不以 https 开头的地址，才添加基地址
    if (!(args.url as string).startsWith("https")) {
      args.url = baseURL + args.url;
    }
    // 为接口统一添加 Authorization 请求头
    // console.log(10, args);
    args.header = args.header || {};
    // 在非vue文件中，哪里使用 Store 就哪里调用
    const memberStore = useMemberStore();
    const token = memberStore.profile.token;
    // 如果有 token 就添加到请求头中
    if (token) {
      args.header.Authorization = token;
    }
  },
});

uni.addInterceptor("uploadFile", {
  invoke(args) {
    // console.log("args：", args);
    // 不以 https 开头的地址，才添加基地址
    if (!(args.url as string).startsWith("https")) {
      args.url = baseURL + args.url;
    }
    // 为接口统一添加 Authorization 请求头
    // console.log(10, args);
    args.header = args.header || {};
    // 在非vue文件中，哪里使用 Store 就哪里调用
    const memberStore = useMemberStore();
    const token = memberStore.profile.token;
    // 如果有 token 就添加到请求头中
    if (token) {
      args.header.Authorization = token;
    }
  },
});

type Data<T> = {
  code: string;
  msg: string;
  result: T;
};

// const http = <T>(options: UniApp.RequestOptions) => {
//   return new Promise<Data<T>>((resolve, reject) => {
//     uni.request({
//       ...options,
//       success: (res) => {
//         resolve(res.data as Data<T>);
//       },
//     });
//   });
// };

const http = <T>(options: UniApp.RequestOptions) => {
  return new Promise<T>((resolve, reject) => {
    uni.request({
      ...options, // url method data
      success: (res) => {
        // console.log(res);
        if (res.statusCode === 200) {
          // 成功的请求
          resolve((res.data as Data<T>).result);
        } else {
          // 统一的错误提示
          uni.showToast({
            icon: "error",
            title: (res.data as Data<T>).msg,
          });
          // 失败的请求
          reject(res);
        }
      },
    });
  });
};

export default http;
